#pragma once

#include <AVUIRotation3D.h>

namespace AVUI {

class QuaternionRotation3D : public Rotation3D
{
public:
    DECLARE_ELEMENT(QuaternionRotation3D, Rotation3D);

    QuaternionRotation3D() { };
    QuaternionRotation3D(const Quaternion& quaternion) { set_Quaternion(quaternion); };
    virtual ~QuaternionRotation3D() { }

    virtual Quaternion get_InternalQuaternion();

    DECLARE_DEPENDENCY_PROPERTY(Quaternion);
    const Quaternion get_Quaternion() { return AVUI::UnboxValue< Quaternion >(GetValue(get_QuaternionProperty())); }
    void set_Quaternion(const Quaternion& value) { SetValue(get_QuaternionProperty(), AVUI::BoxValue(value)); } 

protected:

    virtual TRefCountedPtr<Freezable> CreateInstanceCore() AVUI_OVERRIDE { return object_allocate<QuaternionRotation3D>().get_Ptr(); }

private:
    static void StaticConstructor();
};


}; // namespace AVUI
